package org.jfk.tbox.net;

import org.jfk.core.utils.ByteUtils;
import org.jfk.tbox.net.app.DSRC_AbnormalAlarm;
import org.jfk.tbox.net.app.DSRC_AbnormalAlarm.DSRC_AbnormalAlarmReq;
import org.jfk.tbox.net.app.DSRC_AbnormalAlarm.DSRC_AbnormalAlarmResp;
import org.jfk.tbox.net.app.TBOX_AbnormalAlarm;
import org.jfk.tbox.net.app.TBOX_BCall;
import org.jfk.tbox.net.app.TBOX_DeviceStatus;
import org.jfk.tbox.net.app.TBOX_Kl15StatusChange;

public class TboxMsgParser {
	
	public static TboxMsg getMsg(String appId,int msgId,byte[] data){
		TboxMsg msg = null;
		if ("0401".equals(appId)){
			TBOX_DeviceStatus app = new TBOX_DeviceStatus();
			switch(msgId){
				case 1: 
					msg = app.new TBOX_DeviceStatusReq(); 
					break;
				case 2: 
					msg = app.new TBOX_DeviceStatusResp();
					break;
				default:
					break;
			}
		}
		if ("0501".equals(appId)){
			TBOX_Kl15StatusChange app = new TBOX_Kl15StatusChange();
			switch(msgId){
				case 1: 
					msg = app.new TBOX_Kl15StatusChangeReq(); 
					break;
				case 2: 
					msg = app.new TBOX_Kl15StatusChangeResp();
					break;
				default:
					break;
			}
		}
		if ("0601".equals(appId)){
			TBOX_AbnormalAlarm app = new TBOX_AbnormalAlarm();
			switch(msgId){
				case 1: 
					msg = app.new TBOX_AbnormalAlarmReq(); 
					break;
				case 2: 
					msg = app.new TBOX_AbnormalAlarmResp();
					break;
				default:
					break;
			}
		}
		if ("0602".equals(appId)){
			DSRC_AbnormalAlarm app = new DSRC_AbnormalAlarm();
			switch(msgId){
				case 1: 
					msg = app.new DSRC_AbnormalAlarmReq(); 
					break;
				case 2: 
					msg = app.new DSRC_AbnormalAlarmResp();
					break;
				default:
					break;
			}
		}
		if ("0901".equals(appId)){
			TBOX_BCall app = new TBOX_BCall();
			switch(msgId){
				case 1: 
					msg = app.new TBOX_BCallReq(); 
					break;
				case 2: 
					msg = app.new TBOX_BCallResp();
					break;
				default:
					break;
			}
		}
		if (msg != null){
			msg.loadData(data);
		}
		return msg;
	}
	

	
	public static TboxMsg loadMsg(byte[] a){
	
		if (a.length > 4 && a[0] == 0x46 && a[1] == 0x4C && a[2] == 0x43 && a[3] == 0x2E){
			
			String appId = null;
			int msgId = 0;
			byte[] tmp5 = {a[20],a[21]};
			appId = ByteUtils.byteToHexString(tmp5);
			byte[] tmp6 = {a[22],a[23]};
			msgId = ByteUtils.byte2ToInt(tmp6);
			
			TboxMsg msg = getMsg(appId,msgId,a);
	
			return msg;
		}else{
			throw new RuntimeException("无头包，丢弃");
		}
	}
}
